package com.mszlu.blog.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.mszlu.blog.dao.mapper.ArticleMapper;
import com.mszlu.blog.dao.pojo.Article;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

@Component

public class ThreadService {
    //期望此操作，在线程池执行【异步执行，不需要等待5秒，结果也可以出来】，不会影响到主线程。
    @Async("taskExcutor")
    public void updateArticleViewCount(ArticleMapper articleMapper, Article article){
        Integer viewCounts = article.getViewCounts();
        Article articleupdate = new Article();
        articleupdate.setViewCounts(viewCounts+1);//最小限度的修改Article的实体类对象
        LambdaQueryWrapper<Article> updatewrapper = new LambdaQueryWrapper<>();
        updatewrapper.eq(Article::getId,article.getId());
        //设置一个为了在多线程的环境下线程安全
        //改之前再确认这个值有没有被其他线程抢先修改。
        updatewrapper.eq(Article::getViewCounts,viewCounts);
        //wrapper 相当于where条件。
        //操作数据库。 实体类加更新条件
        articleMapper.update(articleupdate,updatewrapper); //update(实体类,更新条件)
        //例： update article set view_count=100 where view_count=99 and id =111
        try{
            Thread.sleep(5000);
            System.out.println("更新完成了");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
